---
title: 'Controlled transaction /w savepoints'
---

# Controlled transaction /w savepoints

A controlled transaction allows you to commit and rollback manually, execute
savepoint commands, and queries in general.

In this example we start a transaction, insert a person, create a savepoint,
try inserting a toy and a pet, and if an error is thrown, we rollback to the
savepoint. Eventually we release the savepoint, insert an audit record and
commit the transaction. If an error is thrown, we catch it and rollback the
transaction.

import { Playground } from '../../../src/components/Playground'

import {
  controlledTransactionWSavepoints
} from './0012-controlled-transaction-w-savepoints'

<div style={{ marginBottom: '1em' }}>
  <Playground code={controlledTransactionWSavepoints} />
</div>

:::info[More examples]
The API documentation is packed with examples. The API docs are hosted [here](https://kysely-org.github.io/kysely-apidoc/),
but you can access the same documentation by hovering over functions/methods/classes in your IDE. The examples are always
just one hover away!

For example, check out these sections:
 - [transaction method](https://kysely-org.github.io/kysely-apidoc/classes/Kysely.html#transaction)
:::
